--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / tests / backend / test_security_exploratory_oracle.py
Displaying Raw • Download
tests/backend/test_security_exploratory_oracle.py fa46dc4ce9ab50cbe66a7a9e4b3bca0140102345 (fa46dc4c) Text, 7.54 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Exploratory fuzzing and light oracles for hardened security surfaces.
Oracles are intentional invariants (not full differential testing):
- WebAudioSource never raises on arbitrary PCM and drops oversized frames
- call timeout parse always lands in [1, 120]
- attachment-like field shapes never crash normalize helpers
"""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787base64
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMock
Tff7b72import T7ee787numpy Tff7b72as T7ee787np
Tff7b72import T7ee787pytest
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3HealthCheckTb4b4b4, Te6edf3givenTb4b4b4, Te6edf3settings
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3strategies Tff7b72as Te6edf3st
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787call_timeout Tff7b72import Tb4b4b4(
Te6edf3MAX_CALL_TIMEOUT_SECONDSTb4b4b4,
Te6edf3MIN_CALL_TIMEOUT_SECONDSTb4b4b4,
Te6edf3clamp_call_timeout_secondsTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787web_audio_bridge Tff7b72import Te6edf3WebAudioSource
Tff7b72class T56d364_SinkTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffframes Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffcan_receiveTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3from_sourceTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72def Td2a8ffhandle_frameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frameTb4b4b4, Te6edf3sourceTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffframesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3frameTb4b4b4)
T8b949e# ---------------------------------------------------------------------------
T8b949e# Light oracles: call timeout
T8b949e# ---------------------------------------------------------------------------
Tf0883e@settingsTb4b4b4(Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4, Te6edf3max_examplesTff7b72=T79c0ff80Tb4b4b4, Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fftoo_slowTb4b4b4]Tb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3rawTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(
Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8ffintegersTb4b4b4(Te6edf3min_valueTff7b72=Tff7b72-T79c0ff10_000Tb4b4b4, Te6edf3max_valueTff7b72=T79c0ff10_000Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff40Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8ffsampled_fromTb4b4b4(
Tb4b4b4[Ta5d6ff"Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff15Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff0Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff-1Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff999999Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff1.5Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnanTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff0x10Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4]
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_oracle_call_timeout_always_in_boundsTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4:
T8b949e"""Oracle: every parseable/unparseable input clamps into the safe window."""
Te6edf3out Tff7b72= Te6edf3clamp_call_timeout_secondsTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72assert Te6edf3MIN_CALL_TIMEOUT_SECONDS Tff7b72<Tff7b72= Te6edf3out Tff7b72<Tff7b72= Te6edf3MAX_CALL_TIMEOUT_SECONDS
Tff7b72def Td2a8fftest_oracle_call_timeout_known_casesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3clamp_call_timeout_secondsTb4b4b4(Tff7b72NoneTb4b4b4) Tff7b72== T79c0ff15
Tff7b72assert Te6edf3clamp_call_timeout_secondsTb4b4b4(Ta5d6ff"Ta5d6ff15Ta5d6ff"Tb4b4b4) Tff7b72== T79c0ff15
Tff7b72assert Te6edf3clamp_call_timeout_secondsTb4b4b4(Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Te6edf3clamp_call_timeout_secondsTb4b4b4(Ta5d6ff"Ta5d6ff120Ta5d6ff"Tb4b4b4) Tff7b72== T79c0ff120
Tff7b72assert Te6edf3clamp_call_timeout_secondsTb4b4b4(Ta5d6ff"Ta5d6ff0Ta5d6ff"Tb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Te6edf3clamp_call_timeout_secondsTb4b4b4(Ta5d6ff"Ta5d6ff-5Ta5d6ff"Tb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Te6edf3clamp_call_timeout_secondsTb4b4b4(Ta5d6ff"Ta5d6ff99999Ta5d6ff"Tb4b4b4) Tff7b72== T79c0ff120
Tff7b72assert Te6edf3clamp_call_timeout_secondsTb4b4b4(Ta5d6ff"Ta5d6ffnopeTa5d6ff"Tb4b4b4) Tff7b72== T79c0ff15
T8b949e# ---------------------------------------------------------------------------
T8b949e# Exploratory + oracle: web audio PCM
T8b949e# ---------------------------------------------------------------------------
Tf0883e@settingsTb4b4b4(Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4, Te6edf3max_examplesTff7b72=T79c0ff60Tb4b4b4, Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fftoo_slowTb4b4b4]Tb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3pcmTff7b72=Te6edf3stTff7b72.Td2a8ffbinaryTb4b4b4(Te6edf3min_sizeTff7b72=T79c0ff0Tb4b4b4, Te6edf3max_sizeTff7b72=Te6edf3WebAudioSourceTff7b72.Td2a8ffMAX_PCM_BYTES Tff7b72+ T79c0ff4096Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_exploratory_web_audio_source_never_raisesTb4b4b4(Te6edf3pcmTb4b4b4)Tb4b4b4:
T8b949e"""Exploratory: arbitrary PCM must not crash push_pcm."""
Te6edf3sink Tff7b72= Te6edf3_SinkTb4b4b4(Tb4b4b4)
Te6edf3src Tff7b72= Te6edf3WebAudioSourceTb4b4b4(Te6edf3target_frame_msTff7b72=T79c0ff60Tb4b4b4, Te6edf3sinkTff7b72=Te6edf3sinkTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3srcTff7b72.Td2a8ffpush_pcmTb4b4b4(Te6edf3pcmTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Te6edf3pytestTff7b72.Td2a8fffailTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffpush_pcm raised: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff30Tb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fftoo_slowTb4b4b4, Te6edf3HealthCheckTff7b72.Td2a8fflarge_base_exampleTb4b4b4]Tb4b4b4,
Tb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3extraTff7b72=Te6edf3stTff7b72.Td2a8ffintegersTb4b4b4(Te6edf3min_valueTff7b72=T79c0ff1Tb4b4b4, Te6edf3max_valueTff7b72=T79c0ff4096Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_oracle_web_audio_drops_oversized_pcmTb4b4b4(Te6edf3extraTb4b4b4)Tb4b4b4:
T8b949e"""Oracle: frames above MAX_PCM_BYTES never reach the sink."""
Te6edf3pcm Tff7b72= Ta5d6ffbTa5d6ff"Tffea00\x00Ta5d6ff" Tff7b72* Tb4b4b4(Te6edf3WebAudioSourceTff7b72.Td2a8ffMAX_PCM_BYTES Tff7b72+ Te6edf3extraTb4b4b4)
Te6edf3sink Tff7b72= Te6edf3_SinkTb4b4b4(Tb4b4b4)
Te6edf3src Tff7b72= Te6edf3WebAudioSourceTb4b4b4(Te6edf3target_frame_msTff7b72=T79c0ff60Tb4b4b4, Te6edf3sinkTff7b72=Te6edf3sinkTb4b4b4)
Te6edf3srcTff7b72.Td2a8ffpush_pcmTb4b4b4(Te6edf3pcmTb4b4b4)
Tff7b72assert Te6edf3sinkTff7b72.Td2a8ffframes Tff7b72== Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8fftest_oracle_web_audio_drops_exact_oversize_boundaryTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3sink Tff7b72= Te6edf3_SinkTb4b4b4(Tb4b4b4)
Te6edf3src Tff7b72= Te6edf3WebAudioSourceTb4b4b4(Te6edf3target_frame_msTff7b72=T79c0ff60Tb4b4b4, Te6edf3sinkTff7b72=Te6edf3sinkTb4b4b4)
Te6edf3srcTff7b72.Td2a8ffpush_pcmTb4b4b4(Ta5d6ffbTa5d6ff"Tffea00\x00Ta5d6ff" Tff7b72* Tb4b4b4(Te6edf3WebAudioSourceTff7b72.Td2a8ffMAX_PCM_BYTES Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3sinkTff7b72.Td2a8ffframes Tff7b72== Tb4b4b4[Tb4b4b4]
Te6edf3srcTff7b72.Td2a8ffpush_pcmTb4b4b4(Te6edf3npTff7b72.Td2a8ffzerosTb4b4b4(T79c0ff160Tb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8ffint16Tb4b4b4)Tff7b72.Td2a8fftobytesTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3sinkTff7b72.Td2a8ffframesTb4b4b4) Tff7b72== T79c0ff1
T8b949e# ---------------------------------------------------------------------------
T8b949e# Light oracles: attachment-like field shapes (mirror serve guards)
T8b949e# ---------------------------------------------------------------------------
Tff7b72def Td2a8ff_safe_image_typeTb4b4b4(Te6edf3rawTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3allowed Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffpngTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffjpegTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffjpgTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffgifTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwebpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbmpTa5d6ff"Tb4b4b4}
Te6edf3image_type Tff7b72= Te6edf3raw Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3rawTb4b4b4, Tffa657strTb4b4b4) Tff7b72else Ta5d6ff"Ta5d6ffpngTa5d6ff"
Te6edf3image_type Tff7b72= Te6edf3image_typeTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ffimage/Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffpngTa5d6ff"
Tff7b72if Te6edf3image_type Tff7b72not Tff7b72in Te6edf3allowedTb4b4b4:
Te6edf3image_type Tff7b72= Ta5d6ff"Ta5d6ffpngTa5d6ff"
Tff7b72return Te6edf3image_type
Tff7b72def Td2a8ff_resolve_served_image_typeTb4b4b4(Te6edf3image_dataTb4b4b4: Tffa657bytesTb4b4b4, Te6edf3declaredTff7b72=Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
T8b949e"""Mirror meshchat LXMF image serve: Content-Type from magic only."""
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787sticker_utils Tff7b72import Te6edf3detect_image_format_from_magic
Te6edf3allowed Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffpngTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffjpegTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffjpgTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffgifTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwebpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbmpTa5d6ff"Tb4b4b4}
Te6edf3detected Tff7b72= Te6edf3detect_image_format_from_magicTb4b4b4(Te6edf3image_dataTb4b4b4)
Tff7b72if Te6edf3detected Tff7b72is Tff7b72None Tff7b72or Te6edf3detected Tff7b72not Tff7b72in Te6edf3allowedTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Ta5d6ff"Ta5d6ffjpegTa5d6ff" Tff7b72if Te6edf3detected Tff7b72== Ta5d6ff"Ta5d6ffjpegTa5d6ff" Tff7b72else Te6edf3detected
Tff7b72def Td2a8ff_try_b64Tb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3rawTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3rawTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72tryTb4b4b4:
Tff7b72return Te6edf3base64Tff7b72.Td2a8ffb64decodeTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Tff7b72None
Tf0883e@settingsTb4b4b4(Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4, Te6edf3max_examplesTff7b72=T79c0ff80Tb4b4b4, Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fftoo_slowTb4b4b4]Tb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3image_typeTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(
Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8ffintegersTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8ffbooleansTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8fflistsTb4b4b4(Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff8Tb4b4b4)Tb4b4b4, Te6edf3max_sizeTff7b72=T79c0ff3Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff40Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8ffsampled_fromTb4b4b4(
Tb4b4b4[Ta5d6ff"Ta5d6ffpngTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffPNGTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffimage/jpegTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffsvgTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffsvg+xmlTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwebmTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4]
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_oracle_image_type_always_allowlistedTb4b4b4(Te6edf3image_typeTb4b4b4)Tb4b4b4:
T8b949e"""Oracle: served image types collapse to the raster allowlist."""
Te6edf3out Tff7b72= Te6edf3_safe_image_typeTb4b4b4(Te6edf3image_typeTb4b4b4)
Tff7b72assert Te6edf3out Tff7b72in Tb4b4b4{Ta5d6ff"Ta5d6ffpngTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffjpegTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffjpgTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffgifTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwebpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbmpTa5d6ff"Tb4b4b4}
Tf0883e@settingsTb4b4b4(Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4, Te6edf3max_examplesTff7b72=T79c0ff60Tb4b4b4, Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fftoo_slowTb4b4b4]Tb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3rawTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(
Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8ffbinaryTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff64Tb4b4b4)Tff7b72.Td2a8ffmapTb4b4b4(Tff7b72lambda Te6edf3bTb4b4b4: Te6edf3base64Tff7b72.Td2a8ffb64encodeTb4b4b4(Te6edf3bTb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffasciiTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff80Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8ffintegersTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8ffsampled_fromTb4b4b4(Tb4b4b4[Ta5d6ff"Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff====Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnot-base64!!!Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffATa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffQQ==Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_exploratory_b64_decode_never_raisesTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4:
T8b949e"""Exploratory: attachment base64 decode path must not throw."""
Tff7b72tryTb4b4b4:
Te6edf3_try_b64Tb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Te6edf3pytestTff7b72.Td2a8fffailTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffb64 helper raised: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_oracle_known_bad_attachment_shapes_rejectedTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3_try_b64Tb4b4b4(Tff7b72NoneTb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3_try_b64Tb4b4b4(T79c0ff123Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3_try_b64Tb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3_safe_image_typeTb4b4b4(Tff7b72NoneTb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffpngTa5d6ff"
Tff7b72assert Te6edf3_safe_image_typeTb4b4b4(T79c0ff99Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffpngTa5d6ff"
Tff7b72assert Te6edf3_safe_image_typeTb4b4b4(Ta5d6ff"Ta5d6ffsvgTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffpngTa5d6ff"
Tff7b72assert Te6edf3_safe_image_typeTb4b4b4(Ta5d6ff"Ta5d6ffimage/webpTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffwebpTa5d6ff"
Tff7b72assert Te6edf3_resolve_served_image_typeTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ff<html>Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3_resolve_served_image_typeTb4b4b4(Ta5d6ffbTa5d6ff"Tffea00\x89Ta5d6ffPNGTffea00\rTffea00\nTffea00\x1aTffea00\nTa5d6ff" Tff7b72+ Ta5d6ffbTa5d6ff"Tffea00\x00Ta5d6ff" Tff7b72* T79c0ff8Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffpngTa5d6ff"
T8b949e# ---------------------------------------------------------------------------
T8b949e# Exploratory: bridge still never crashes with mocked sink under fuzz PCM
T8b949e# ---------------------------------------------------------------------------
Tf0883e@settingsTb4b4b4(Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4, Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4, Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fftoo_slowTb4b4b4]Tb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3pcmTff7b72=Te6edf3stTff7b72.Td2a8ffbinaryTb4b4b4(Te6edf3min_sizeTff7b72=T79c0ff0Tb4b4b4, Te6edf3max_sizeTff7b72=Te6edf3WebAudioSourceTff7b72.Td2a8ffMAX_PCM_BYTES Tff7b72+ T79c0ff2048Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_exploratory_bridge_push_with_real_sourceTb4b4b4(Te6edf3pcmTb4b4b4)Tb4b4b4:
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787web_audio_bridge Tff7b72import Te6edf3WebAudioBridge
Te6edf3tele_mgr Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3tele_mgrTff7b72.Td2a8ffis_voicemail_session_active Tff7b72= Tff7b72False
Te6edf3bridge Tff7b72= Te6edf3WebAudioBridgeTb4b4b4(Te6edf3tele_mgrTb4b4b4, Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3sink Tff7b72= Te6edf3_SinkTb4b4b4(Tb4b4b4)
Te6edf3bridgeTff7b72.Td2a8fftx_source Tff7b72= Te6edf3WebAudioSourceTb4b4b4(Te6edf3target_frame_msTff7b72=T79c0ff60Tb4b4b4, Te6edf3sinkTff7b72=Te6edf3sinkTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3bridgeTff7b72.Td2a8ffpush_client_frameTb4b4b4(Te6edf3pcmTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Te6edf3pytestTff7b72.Td2a8fffailTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffpush_client_frame raised: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3pcmTb4b4b4) Tff7b72> Te6edf3WebAudioSourceTff7b72.Td2a8ffMAX_PCM_BYTESTb4b4b4:
Tff7b72assert Te6edf3sinkTff7b72.Td2a8ffframes Tff7b72== Tb4b4b4[Tb4b4b4]
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────